<?php
namespace app\api\controller;
use app\common\model\Weixin as WeixinModel;

use WeChat;

use think\Controller;
use think\Db;

/**
 * 微信相关接口
 * Class Weixin
 * @package app\api\controller
 */
class Weixin extends Controller
{
    protected $weixin_model;
    private $config;

    protected function _initialize()
    {
        parent::_initialize();
        $this->weixin_model = new WeixinModel();
        $weixin  = $this->weixin_model->find(1);

        $this->config  = [
            'appid'          => $weixin['appid'],
            'appsecret'      => $weixin['appsecret'],
            'token'          => $weixin['token'],
            'encodingaeskey' => $weixin['encodingaeskey'],
            // 配置商户支付参数（可选，在使用支付功能时需要）
            'mch_id'         => $weixin['mch_id'],
            'mch_key'        => $weixin['mch_key'],
            // 配置商户支付双向证书目录（可选，在使用退款|打款|红包时需要）
            'ssl_key'        => $weixin['ssl_key'],
            'ssl_cer'        => $weixin['ssl_cer'],
            // 缓存目录配置（可选，需拥有读写权限）
            'cache_path'     => ROOT_PATH .$weixin['cache_path'],
        ];
    }


    /**
     * Oauth授权跳转接口
     */
    public function get_oauth_redirect($redirect_url, $state = '', $scope = 'snsapi_userinfo'){
        try {
            // 实例对应的接口对象
            $wechat = new WeChat\Oauth($this->config);

            // 执行操作
            $result = $wechat->getOauthRedirect($redirect_url, $state, $scope);

            // 处理返回的结果
            //var_export($result);

        } catch (Exception $e) {

            // 出错啦，处理下吧
            echo $e->getMessage() . PHP_EOL;

        }

        return $result;
    }

    /**
     * 通过code获取AccessToken和openid
     */
    public function get_oauth_accesstoken(){
        try {
            // 实例对应的接口对象
            $wechat = new WeChat\Oauth($this->config);

            // 执行操作
            $result = $wechat->getOauthAccessToken();

            // 处理返回的结果
            //var_export($result);

        } catch (Exception $e) {

            // 出错啦，处理下吧
            echo $e->getMessage() . PHP_EOL;

        }

        return $result;
    }


    /**
     * 通过code获取AccessToken和openid
     */
    public function get_user_info($access_token, $openid, $lang = 'zh_CN'){
        try {
            // 实例对应的接口对象
            $wechat = new WeChat\Oauth($this->config);

            // 执行操作
            $result = $wechat->getUserInfo($access_token,$openid, $lang);

            // 处理返回的结果
            //var_export($result);

        } catch (Exception $e) {

            // 出错啦，处理下吧
            echo $e->getMessage() . PHP_EOL;

        }

        return $result;
    }

    /**
     * 获取JSSDK网址签名配置
     */
    public function jssdk($url){
        try {
            // 实例对应的接口对象
            $wechat = new WeChat\Script($this->config);

            // 4. 获取JSSDK网址签名配置
            $result = $wechat->getJsSign($url);

            // 处理返回的结果
            //var_export($result);

        } catch (Exception $e) {

            // 出错啦，处理下吧
            echo $e->getMessage() . PHP_EOL;

        }

        return $result;
    }

    /**
     * 获取临时素材
     */
    public function temporary_material($media_id){
        try {
            // 实例对应的接口对象
            $wechat = new WeChat\Media($this->config);

            // 执行操作
            $result = $wechat->get($media_id);

            // 处理返回的结果
            //var_export($result);

        } catch (Exception $e) {

            // 出错啦，处理下吧
            echo $e->getMessage() . PHP_EOL;

        }

        return $result;
    }

    /**
     * 获取用户基本信息
     */
    public function get_user($openid, $lang = 'zh_CN'){
        try {

            // 实例接口
            $wechat = new WeChat\User($this->config);

            // 执行操作
            $result = $wechat->getUserInfo($openid, $lang);

        } catch (Exception $e){
            // 异常处理
            echo  $e->getMessage();
        }
        return $result;
    }

    /**
     * 发送模板消息
     */
    public function send_template_messages($data){
        try {
            // 实例接口
            $wechat = new WeChat\Template($this->config);

            // 执行操作
            $result = $wechat->send($data);

        } catch (Exception $e){

            // 异常处理
            echo  $e->getMessage();
        }

        return $result;
    }


}